package com.dc.gameserver.extComponents.Kit.mybatisPagination;//package com.dc.gameserver.extComponents.utilsKit.mybatisPagination;
//
//import org.mybatis.generator.api.CommentGenerator;
//import org.mybatis.generator.api.IntrospectedTable;
//import org.mybatis.generator.api.PluginAdapter;
//import org.mybatis.generator.api.ShellRunner;
//import org.mybatis.generator.api.dom.java.*;
//import org.mybatis.generator.api.dom.xml.Attribute;
//import org.mybatis.generator.api.dom.xml.TextElement;
//import org.mybatis.generator.api.dom.xml.XmlElement;
//
//import java.util.List;
//
///**
// * @author 石头哥哥
// *         Date: 13-12-3</br>
// *         Time: 下午12:20</br>
// *         Package: com.dc.gameserver.extComponents.utilsKit</br>
// *         注解： 基于mybatis数据分页功能
// */
//public class PaginationPlugin extends PluginAdapter {
//
//    @Override
//    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
//                                              IntrospectedTable introspectedTable) {
//        // add field, getter, setter for limit clause
//        addLimit(topLevelClass, introspectedTable, "limitStart");
//        addLimit(topLevelClass, introspectedTable, "limitEnd");
//        return super.modelExampleClassGenerated(topLevelClass,
//                introspectedTable);
//    }
//    @Override
//    public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
//            XmlElement element, IntrospectedTable introspectedTable) {
//        XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
//        isNotNullElement.addAttribute(new Attribute("test", "limitStart != null and limitStart>=0")); //$NON-NLS-1$ //$NON-NLS-2$
//        isNotNullElement.addElement(new TextElement(
//                "limit #{limitStart} , #{limitEnd}"));
//        element.addElement(isNotNullElement);
//        return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element,
//                introspectedTable);
//    }
//
//    /**
//     *
//     * @param topLevelClass
//     * @param introspectedTable
//     * @param name
//     */
//    private void addLimit(TopLevelClass topLevelClass,
//                          IntrospectedTable introspectedTable, String name) {
//        CommentGenerator commentGenerator = context.getCommentGenerator();
//        Field field = new Field();
//        field.setVisibility(JavaVisibility.PROTECTED);
//        field.setType(PrimitiveTypeWrapper.getIntegerInstance());
//        field.setName(name);
//        commentGenerator.addFieldComment(field, introspectedTable);
//        topLevelClass.addField(field);
//        char c = name.charAt(0);
//        String camel = Character.toUpperCase(c) + name.substring(1);
//        Method method = new Method();
//        method.setVisibility(JavaVisibility.PUBLIC);
//        method.setName("set" + camel);
//        method.addParameter(new Parameter(PrimitiveTypeWrapper.getIntegerInstance(), name));
//        method.addBodyLine("this." + name + "=" + name + ";");
//        commentGenerator.addGeneralMethodComment(method, introspectedTable);
//        topLevelClass.addMethod(method);
//        method = new Method();
//        method.setVisibility(JavaVisibility.PUBLIC);
//        method.setReturnType(PrimitiveTypeWrapper.getIntegerInstance());
//        method.setName("get" + camel);
//        method.addBodyLine("return " + name + ";");
//        commentGenerator.addGeneralMethodComment(method, introspectedTable);
//        topLevelClass.addMethod(method);
//    }
//    /**
//     * This plugin is always valid - no properties are required
//     */
//    public boolean validate(List<String> warnings) {
//        return true;
//    }
//
//    public static void generate() {
//        String config ="res/gameConfig/generatorConfig.xml";
//        String[] arg = { "-configfile", config, "-overwrite" };
//        ShellRunner.main(arg);
//    }
//    public static void main(String[] args) {
//        generate();
//    }
//}